<?php
/**
 * Ausgabe von Sternzeichen anhand des Datums dd.mm
 * 
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2013 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 * 
 * */


Class Yapary_Other_SignOfZodiacState
{
	const SECONDS_PER_DAY = 86400; // 60*60*24
	const SECONDS_PER_MONTH = 2678400; // 40*60*24*31 Muss nicht so genau sein, lediglich um einen "virtuellen" timestamp zu erhalten

	var $from = NULL;
	var $to = NULL;
	var $name = NULL;
	


	function __construct ( $from = NULL, $to = NULL, $name = NULL )
	{
		if( $from != NULL && $to !=  NULL && $name != NULL)
			return $this->set($from, $to, $name);
		
		return NULL;
	}

	
	
	/**
	* Fuegt ein Sternzeichen anhand der Ober- un Untegrenze hinzu
	* @param string $from : Datum von im Format dd.mm
	* @param string $to : Datum von im Format dd.mm
	* @param string $name : Name des Sternzeichens
	* @return bool
	*/
	private function set( $from, $to, $name )
	{
		if( !preg_match("/^\d{2}\.\d{2}$/", $from) )
			return false;
		if( !preg_match("/^\d{2}\.\d{2}$/", $to) )
			return false;
		if( strlen($name) == 0 )
			return false;
			
		$this->from = $from;
		$this->to = $to;
		$this->name = $name;
		return true;
	}

	
	
	public function getFrom ( )
	{
		return $this->from;
	}

	
	
	public function getTo ( )
	{
		return $this->from;
	}

	
	
	public function getName ( )
	{
		return $this->name;
	}



	/**
	* Prueft ob ein Datum im Intervall liegt
	* @param string $date : Datum im Format dd.mm
	* @return bool|NULL
	*/
	public function isFit( $date )
	{
		// Aktuelles Datum und gegebenes Datum in eine "virtuelle" Zahl umwandeln
		// und diese durch Ober-/Untergrenze vergleichen
		$tsFrom = (int) ($this->from{3}.$this->from{4})*self::SECONDS_PER_MONTH + ($this->from{0}.$this->from{1})*self::SECONDS_PER_DAY;
		$tsTo = (int) ($this->to{3}.$this->to{4})*self::SECONDS_PER_MONTH + ($this->to{0}.$this->to{1})*self::SECONDS_PER_DAY;
		$tsCur = (int) ($date{3}.$date{4})*self::SECONDS_PER_MONTH + ($date{0}.$date{1})*self::SECONDS_PER_DAY;


		if( !preg_match("/^\d{2}\.\d{2}$/", $date) )
			return NULL;
		
		if( $tsCur >= $tsFrom && $tsCur <= $tsTo )
			return true;
		
		return false;
	}
}